// Copyright (C) 2017 Valerie Young. All rights reserved.
// This code is governed by the BSD license found in the LICENSE file.

/*---
description: ASI test in field declarations -- field with PropertyName "in" interpreted as index
esid: sec-automatic-semicolon-insertion
features: [class, class-fields-public]
---*/

function Test() {
    var x = 0;
    var y = 1;
    var z = [42];

    class C {
      a = x
      in
      z
      b = y
      in
      z
    }

    var c = new C();

    assert.sameValue(c.a, true, 'a = x in z');
    assert.sameValue(c.b, false, 'b = y in z');
    assert.sameValue(Object.hasOwnProperty.call(c, "in"), false, "'in'");
    assert.sameValue(Object.hasOwnProperty.call(c, "z"), false, "'z'");
}

// preheat
const NUMBER_OF_PREHEAT = 1;
for (let i = 0; i < NUMBER_OF_PREHEAT; i++) {
    Test();
}

ArkTools.jitCompileAsync(Test);
assert.sameValue(ArkTools.waitJitCompileFinish(Test), true, '[JIT] JIT disabled.');

// test
const NUMBER_OF_TEST = 1; // or 2
for (let i = 0; i < NUMBER_OF_TEST; i++) {
    Test();
}
